//
//  AddressSelector.m
//  NZTaxi
//
//  Created by Allan Vergara on 4/10/10.
//  Copyright 2010 List-it. All rights reserved.
//


#import "CitySelector.h"
#import <CoreData/CoreData.h>
#import "NZTaxiAppDelegate.h"
#import "Region.h"
#import "StreetSelector.h"
#import "Region.h"


@implementation CitySelector


//NSString * const C_SELECTED_CITY = @"SELECTED_CITY";

@synthesize searchDisplayController, filteredCities, isHomeAddress;


#pragma mark -
#pragma mark View lifecycle


- (void)viewDidLoad {
    [super viewDidLoad];
	
	self.navigationItem.title = @"City";
	
	// programmatically set up search bar
	UISearchBar *searchBar = [[UISearchBar alloc] init];
	//[searchBar setScopeButtonTitles:[NSArray arrayWithObjects:@"First",@"Last",nil]];
	searchBar.delegate = self;
	[searchBar setAutocapitalizationType:UITextAutocapitalizationTypeNone];
	[searchBar sizeToFit];
	self.tableView.tableHeaderView = searchBar;
	
	// programmatically set up search display controller
	searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self];
	[self setSearchDisplayController:searchDisplayController];
	[searchDisplayController setDelegate:self];
	[searchDisplayController setSearchResultsDataSource:self];
	
	
	[searchBar release];
	
	// get the previous search string
	NSUserDefaults *userDef = [NSUserDefaults standardUserDefaults];
	NSString *searchStr = [userDef stringForKey:C_CITY_SEARCH_STRING]; 
	
	self.filteredCities = [self GetCities:searchStr];	
}

/*
 - (void)viewWillAppear:(BOOL)animated {
 [super viewWillAppear:animated];
 }
 */
- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
}

/*
 - (void)viewWillDisappear:(BOOL)animated {
 [super viewWillDisappear:animated];
 }
 */
/*
 - (void)viewDidDisappear:(BOOL)animated {
 [super viewDidDisappear:animated];
 }
 */
/*
 // Override to allow orientations other than the default portrait orientation.
 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
 // Return YES for supported orientations
 return (interfaceOrientation == UIInterfaceOrientationPortrait);
 }
 */


-(void) searchBarTextDidBeginEditing:(UISearchBar *)theSearchBar {
	self.tableView.scrollEnabled = NO;
	
	//Add the done button.
	self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc]
											   initWithBarButtonSystemItem:UIBarButtonSystemItemDone
											   target:self action:@selector(doneSearching_Clicked:)] autorelease];
}

#pragma mark -
#pragma mark Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    // Return the number of sections.
    return 1;
}

-(NSArray *)GetCities:(NSString *)beginsWith {
	NZTaxiAppDelegate *appDelegate = (NZTaxiAppDelegate *)[[UIApplication sharedApplication] delegate];
	NSManagedObjectContext *context = [appDelegate managedObjectContext];
	
	
	NSFetchRequest *fetch = [[NSFetchRequest alloc] init];
	NSEntityDescription *entity = [NSEntityDescription entityForName:@"Region" inManagedObjectContext:context];
	
	/* this is for the query */
	if ([beginsWith length] != 0) {
		NSLog(@"GetCities beginsWith = %@", beginsWith);
		NSPredicate *predicate = [NSPredicate predicateWithFormat:@"Region CONTAINS[cd] %@", beginsWith];
		[fetch setPredicate:predicate];
	}
	
	/* this is for sorting */
	NSSortDescriptor *sortByRegion = [[[NSSortDescriptor alloc] initWithKey:@"Region" ascending:YES] autorelease];
	[fetch setEntity:entity];
	
	NSArray *cityArray = [context executeFetchRequest:fetch error:nil];
	NSArray *sorted = [cityArray sortedArrayUsingDescriptors:[NSArray arrayWithObjects:sortByRegion, nil]];	
	
	[fetch release];
	
	return sorted;	
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    // Return the number of rows in the section.
    return [self.filteredCities count];
}


// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
	if(tableView == self.searchDisplayController.searchResultsTableView){ 
		tableView.hidden = YES; 
		NSLog(@"Hidding City search result table view");
	}
	
    static NSString *CellIdentifier = @"Cell";
    
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }
    
	Region *region = (Region *)[self.filteredCities objectAtIndex:indexPath.row];
	cell.textLabel.text = region.Region;
	[cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
    
    return cell;
}


/*
 // Override to support conditional editing of the table view.
 - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
 // Return NO if you do not want the specified item to be editable.
 return YES;
 }
 */


/*
 // Override to support editing the table view.
 - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
 
 if (editingStyle == UITableViewCellEditingStyleDelete) {
 // Delete the row from the data source
 [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
 }   
 else if (editingStyle == UITableViewCellEditingStyleInsert) {
 // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
 }   
 }
 */


/*
 // Override to support rearranging the table view.
 - (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
 }
 */


/*
 // Override to support conditional rearranging of the table view.
 - (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
 // Return NO if you do not want the item to be re-orderable.
 return YES;
 }
 */

#pragma mark -
#pragma mark Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{	
	NSUserDefaults *preps = [NSUserDefaults standardUserDefaults];
	
	// save settings
	Region *region = (Region *)[self.filteredCities objectAtIndex:indexPath.row];
	[preps setObject:region.Region forKey:C_CITY_SEARCH_STRING];
	
	StreetSelector *controller = [[StreetSelector alloc] initWithNibName:@"StreetSelector" bundle:nil];
	controller.selectedRegion = region.Region;
	controller.isHomeAddress = isHomeAddress;
	
	// Pass the selected object to the new view controller.
	[self.navigationController pushViewController:controller animated:YES];
	[controller release];
}

-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
    self.filteredCities = [self GetCities:searchString];
	[self.tableView reloadData];
	
    // Return YES to cause the search result table view to be reloaded.
    return NO;
}

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchScope:(NSInteger)searchOption
{
    // Return YES to cause the search result table view to be reloaded.
    return YES;
}


#pragma mark -
#pragma mark Memory management

- (void)didReceiveMemoryWarning {
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];
    
    // Relinquish ownership any cached data, images, etc that aren't in use.
}

- (void)viewDidUnload {
    // Relinquish ownership of anything that can be recreated in viewDidLoad or on demand.
    // For example: self.myOutlet = nil;
}


- (void)dealloc {
	[filteredCities release];
	[searchDisplayController release];
    [super dealloc];
}


@end